package reflect;

import java.lang.reflect.Method;

/**
 * 注解 Annotation
 * 注解可以应用于:
 * 包，参数，类，方法，属性上，与注释不同，它可以被反射机制获取并加以利用。
 *
 * 现在互联网应用中流行的框架都是用注解作为配置信息。比如spring.
 *
 * 注解的格式
 * @注解名(属性名=属性值，xx==xx,...)
 * 注解可以在使用时附带一些数据，以属性名=属性值的形式指定，当然也可以不指定
 */
public class ReflectDemo7 {
    public static void main(String[] args) throws Exception{
        /*
            通过反射机制获取一个类当中使用的注解信息
         */
        //获取Person的类对象
        Class cls = Class.forName("reflect.Person");

        //获取sayHello方法
        Method method = cls.getMethod("sayHello");
        /*
            反射中常用的几个类:
            class(表示一个类),Method(表示一个方法),Field(表示一个属性)等
            都提供了一个方法:
            boolean isAnnotationPresent)(class cls)
            用来判断是否使用了某个注解
         */
        //判断sayHello方法上是否使用了注解：@MethodAnno
        if (method.isAnnotationPresent(MethodAnno.class)){
            System.out.println(method.getName()+"使用了");
        }else {
            System.out.println(method.getName()+"没使用");
        }
    }
}
